Cancel and disconnect from the bookmarks monitor when done
authorFederico Mena Quintero <federico@gnome.org>
Fri, 30 Sep 2011 14:43:59 +0000 (09:43 -0500)
committerFederico Mena Quintero <federico@gnome.org>
Tue, 4 Sep 2012 01:52:40 +0000 (20:52 -0500)
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
gtk/gtkbookmarksmanager.c
gtk/gtkbookmarksmanager.h

index 19f79f9eb0c70c3b41dba8a51e1ba61abb5964e3..2bb16b79efe9197bf38fd863fce8f3ebd1284876 100644 (file)
@@ -224,8 +224,8 @@ _gtk_bookmarks_manager_new (GtkBookmarksChangedFunc changed_func, gpointer chang
       g_error_free (error);
     }
   else
-    g_signal_connect (manager->bookmarks_monitor, "changed",
-                     G_CALLBACK (bookmarks_file_changed), manager);
+    manager->bookmarks_monitor_changed_id = g_signal_connect (manager->bookmarks_monitor, "changed",
+                                                             G_CALLBACK (bookmarks_file_changed), manager);
 
   g_object_unref (bookmarks_file);
 
@@ -238,7 +238,12 @@ _gtk_bookmarks_manager_free (GtkBookmarksManager *manager)
   g_return_if_fail (manager != NULL);
 
   if (manager->bookmarks_monitor)
-    g_object_unref (manager->bookmarks_monitor);
+    {
+      g_file_monitor_cancel (manager->bookmarks_monitor);
+      g_signal_handler_disconnect (manager->bookmarks_monitor, manager->bookmarks_monitor_changed_id);
+      manager->bookmarks_monitor_changed_id = 0;
+      g_object_unref (manager->bookmarks_monitor);
+    }
 
   if (manager->bookmarks)
     {
index ee98d875d69864290fc9ab7e1ac2890b87c793c7..a991c04648d65291b4b9752bfb6981554ad82af8 100644 (file)
@@ -35,6 +35,7 @@ typedef struct
   GSList *bookmarks;
 
   GFileMonitor *bookmarks_monitor;
+  gulong bookmarks_monitor_changed_id;
 
   gpointer changed_func_data;
   GtkBookmarksChangedFunc changed_func;